execjs使用时异常
一.异常信息(...gbk.....)
UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xa1 in position 26: illegal multibyte sequence
解决办法
进入报错源码
\lib\subprocess.py
因为是codec
相关报错
就搜索encoding
,为什么搜这个就是代码写多了感觉
我们会发现这样一段
def __init__(self, args, bufsize=-1, executable=None,
stdin=None, stdout=None, stderr=None,
preexec_fn=None, close_fds=True,
shell=False, cwd=None, env=None, universal_newlines=None,
startupinfo=None, creationflags=0,
restore_signals=True, start_new_session=False,
pass_fds=(), *, encoding=None, errors=None, text=None):
#encoding是空怪不得是gbk报错
#直接修改encoding=utf8
解决啦~~
二.异常信息(没有window对象)
execjs._exceptions.ProgramError: TypeError: __g._encrypt is not a function
解决办法
我们execjs除了nodejs
我们还需要浏览器环境
,我们浏览器上还需要document
以及window
对象所有呢我们要安装环境
执行npm install jsdom
代码.py中我们要修改内容
#js_obj = execjs.compile(js_codex)修改成
js_obj = execjs.compile(js_code,cwd='node_modules'),
#也就是导入我们下载完成后的node_modules的文件
然后呢我们在Js_encryption.js
开头添加代码
const jsdom = require("jsdom");
const { JSDOM } = jsdom;
const dom = new JSDOM(`<!DOCTYPE html><p>Hello world</p>`);
window = dom.window;
document = window.document;
XMLHttpRequest = window.XMLHttpRequest;
//固定写法别想那么多